package com.zhu.library_management_system.jwt;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


public class TokenService {
    private static final Key SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS512); // 生成密钥
    private static final long EXPIRATION_TIME =  7 * 24 * 3600_000;
    /**
     * 生成JWT Token
     * @param userId 用户ID
     * @return 生成的Token字符串
     */
    public static String generateToken(Integer userId) { // 返回类型改为String
        Map<String, Object> claims = new HashMap<>();
        claims.put("userId", userId);

        return Jwts.builder()
                .setClaims(claims)
                .setIssuedAt(new Date()) // 签发时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 过期时间
                .signWith(SECRET_KEY, SignatureAlgorithm.HS512) // 签名算法
                .compact();
    }


    /**
     * 解析Token获取用户ID
     * @param token JWT Token字符串
     * @return 用户ID
     */
    public static Integer parseUserId(String token) {
        try {
            // 去除Bearer前缀
            if (token.startsWith("Bearer ")) {
                token = token.substring(7);
            }
            // 解析Token并获取claims
            Claims claims = Jwts.parser()
                    .setSigningKey(SECRET_KEY) // 使用相同的密钥
                    .parseClaimsJws(token)
                    .getBody();
            // 获取userId（需与生成Token时的键名一致）
            return claims.get("userId", Integer.class);
        } catch (Exception e) {
            throw new RuntimeException("Token解析失败", e);
        }
    }
}
